#include "vector_dinamico.h"
#include "Indice.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/* ******************************************************************
 *                        PRUEBAS UNITARIAS							*
 * *****************************************************************/

/* Función auxiliar para imprimir si estuvo OK o no. */
void print_test(char* name, bool result) {
    printf("%s: %s\n", name, result? "OK" : "ERROR");
}

void prueba_indice_invalido () {
	printf ("\nPRUEBAS DE INDICE INVALIDO\n\n");
	
	vector_dinamico_t* lexico = vector_crear (5, NULL);
	vector_dinamico_t* datos  = vector_crear (7, NULL);
	
	/* Pruebo la creación de un indice invalido */
	print_test("Prueba crear un indice con lexico invalido", !(Indice_crear(NULL,datos)));
	print_test("Prueba crear un indice con datos invalido", !(Indice_crear(lexico,NULL)));
	print_test("Prueba crear un indice con lexico y datos invalidos", !(Indice_crear(NULL,NULL)));
	
	/* Pruebo las otras primitivas */
	print_test("Prueba indice ver rutas lexico con indice invalido", !(Indice_verRutasLexico(NULL)));
	print_test("Prueba indice ver rutas datos con indice invalido", !(Indice_verRutasDatos(NULL)));
	Indice_destruir (NULL);
	
	vector_destruir (lexico);
	vector_destruir (datos);
}

void prueba_indice_valido () {
	printf ("\nPRUEBAS DE INDICE VALIDO\n\n");
	
	Indice_t* indice;
	vector_dinamico_t* lexico = vector_crear (5, NULL);
	vector_dinamico_t* datos  = vector_crear (7, NULL);
	
	/* Pruebo la creación de un indice valido */
	indice = Indice_crear (lexico, datos);
	print_test("Prueba crear un indice valido", (indice != NULL));
	
	/* Pruebo las otras primitivas */
	vector_dinamico_t* lexico_obt = Indice_verRutasLexico (indice);
	print_test("Prueba indice ver rutas lexico con indice valido", (lexico_obt == lexico));
	
	vector_dinamico_t* datos_obt = Indice_verRutasDatos (indice);
	print_test("Prueba indice ver rutas datos con indice valido", (datos_obt == datos));
	
	Indice_destruir (indice);
}


/* ******************************************************************
 *                        PROGRAMA PRINCIPAL						*
 * *****************************************************************/

int main () {
	
	printf ("\nCOMIENZO DE PRUEBAS DE INDICE.\n");
	
	/* Ejecuta todas las pruebas unitarias. */
	prueba_indice_invalido ();
	prueba_indice_valido ();
	
	printf ("\nFIN DE PRUEBAS DE INDICE.\n\n");
	return 0;
}
